// app.js
const baseUrl = 'https://gsdse.cn/api/KJRecruit';


App({
  //获取的ID和openId
  data: {
    userId: '',
    _openid: '',
    personInfo: {},
    department: {},
    domain: 'https://gsdse.cn/api/KJRecruit',
    baseDomain: 'https://gsdse.cn',
    infoHaveEdited: false,
    isWolf: true,
    departmentArray: ['秘书处', '网络研发部', "影视部", '动画部', "PC技术部", "新媒体运营部", 'UI设计部']
  },
  // 用户进来这个小程序时调用的函数
  onLaunch: async function () {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力');
    } else {
      wx.cloud.init({
        // env 参数说明：
        // env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境（第一个创建的环境）
        nv: 'cloud1-8g54d6xb74e96e7d',
        traceUser: true,
      });
    }
    //无感登录
    //获取userId并作为全局变量存储
    const userInfo = await this.selectOpenId()
    if (userInfo.userId === null) {
      this.showError("获取用户ID失败！")
    }
    // console.log(userInfo)
    this.data.userId = userInfo.userId
    this.data._openid = userInfo.openId
    //获取用户信息
    this.data.personInfo = await this.selectUser(this.data.userId)
    if (this.data.personInfo === 'new') {
      //新用户注册
      await this.newUserLogin(this.data.userId)
    }
    //获取部门信息
    this.data.department = await this.getDepartment(this.data.personInfo.departmentId)
    //判断信息是否修改
    this.IsPersonalInfoEdit(this.data.personInfo)
    //增加头像信息
    this.data.personInfo.avatarUrl = userInfo.avatarUrl
    //增加用户nickName信息
    this.data.personInfo.nickName = userInfo.nickName
    //显示更新提示
    if (!this.data.isWolf) {
      wx.showModal({
        title: '更新提示',
        content: '本小程序正在更新中，如给您造成不便实在抱歉：',
      })
    }
  },
  onShow: async function () {
    //展示狼头
    this.data.isWolf = await this.showWolf()
  },
  //更新部门信息
  updataDepartment: async function () {
    this.data.department = await this.getDepartment(this.data.personInfo.departmentId)
  },
  //获取openId并通过openId查询用户信息
  selectOpenId() {
    const that = this
    return new Promise((resolve, reject) => {
      wx.login({
        success: (res) => {
          wx.request({
            url: baseUrl + '/wechatLogin',
            method: 'POST',
            header: {
              "Content-Type": "application/x-www-form-urlencoded"
            },
            data: {
              code: res.code
            },
            success: function (res) {
              console.log(res)
              let openId = res.data.data.openid
              wx.request({
                url: baseUrl + '/selectUserByOpenid',
                method: 'POST',
                header: {
                  "Content-Type": "application/x-www-form-urlencoded"
                },
                data: {
                  openid: openId
                },
                success: function (res) {
                  resolve({
                    userId: res.data.data.userId,
                    avatarUrl: res.data.data.avatarUrl,
                    nickName: res.data.data.nickName,
                    openId: openId,
                  })
                },
                fail: function (err) {
                  console.error(error)
                  that.showError("登录失败！")
                }
              })
            }
          })
        },
        fail: function (err) {
          console.error(err)
          that.showError("登录失败！")
        }
      })
    })

  },
  //获取用户信息
  selectUser(userId) {
    const that = this;
    if (!userId) { //如果userId无效则用全局变量
      userId = that.data.userId
    }
    return new Promise((resolve, reject) => {
      wx.request({
        url: baseUrl + '/selectUser',
        method: 'POST',
        header: {
          "Content-Type": "application/x-www-form-urlencoded"
        },
        data: {
          userId: userId
        },
        success: async function (res) {
          //分辨是否为新用户
          // console.log(res.data.code)
          if (res.data.code === 0) { //老用户
            console.log('老用户')
            await that.IsPersonalInfoEdit(res.data.data)
            resolve(res.data.data)
          } else if (res.data.code === 1) { //新用户
            console.log('新用户')
            resolve('new')
          }
        }
      })
    })
  },
  //新用户注册
  newUserLogin(userId) {
    const that = this;
    return new Promise((resolve, reject) => {
      wx.request({
        url: baseUrl + '/addUser',
        method: 'POST',
        data: {
          userId: userId,
          applyId: userId,
          wxuserId: userId,
          phoneNumber: '',
          email: '',
          positionName: 0,
          position: '无',
          departmentId: 0,
          schoolClass: '',
          userName: '新用户'
        },
        header: {
          "Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
        },
         success: function (res) {
          if(res.data.code==0){
             that.data.personInfo=res.data.data 
          }
          else{
            wx.showModal({
              showCancel: false,
              title: '提示',
              content: '注册失败，请刷新小程序！若仍然无效，请联系管理员。',
            cancelColor: 'cancelColor',
            })
          }
        },
        fail:(err)=> {
         console.log(err) 
        }
      })
    })
  },
  //获取部门信息
  getDepartment(departmentId) {
    return new Promise((resolve, reject) => {
      if (departmentId) {
        wx.request({
          url: baseUrl + '/selectDepartment',
          method: 'POST',
          data: {
            departmentId: departmentId,
          },
          header: {
            "Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
          },
          success: (res) => {
            resolve(res.data.data)
          }
        })
      }
    })
  },
  //判断信息是否已修改
  IsPersonalInfoEdit(info) {
    const that = this
    //校验姓名、电话号和邮箱
    return new Promise((reslove, reject) => {
      wx.request({
        url: baseUrl+'/checkHaveEdit',
        method:'GET',
        data:{
          userId:that.data.userId
        },
        success:function (res) {
          if(res.data.code==0){
            that.data.infoHaveEdited=res.data.data
            console.log(res.data.data)
            reslove(res.data.data)
          }
          else {
            wx.showModal({
              showCancel: false,
              title: '提示',
              content: '检测用户信息异常，请刷新小程序！若仍然无效，请联系管理员。',
            cancelColor: 'cancelColor',
            })
            reslove(false)
          }
        },
        fail:function (err) {
         console.log(err) 
         wx.showModal({
          showCancel: false,
          title: '提示',
          content: '服务器异常，请联系管理员。',
          cancelColor: 'cancelColor',
        })
         reslove(false)
        }
      })
      
    })
    
  },

  //显示错误信息
  showError(error) {
    wx.showToast({
      title: error,
      icon: 'error'
    })
  },
  showSuccess(success) {
    wx.showToast({
      title: success,
      icon: 'success'
    })
  },
  showMessage(msg) {
    wx.showToast({
      title: msg,
      icon: 'none'
    })
  },
  //修改用户信息
  updateUserInfo(userInfo) {
    const that = this
    //先更改全局变量
    //判断是不是自己的信息
    if (userInfo.userId === that.data.personInfo.userId) {
      userInfo = that.data.personInfo
    }
    if(userInfo.userId==null){
      wx.showModal({
        showCancel: false,
        title: '提示',
        content: '获取用户信息失败，请刷新小程序缓存，注意不是重新进入小程序！若仍然无效，请联系管理员。',
        cancelColor: 'cancelColor',
      })
      return false
    }
    console.log(userInfo)
    return new Promise((resolve, reject) => {
      wx.request({
        url: baseUrl + '/updateUser',
        method: 'POST',
        header: {
          "Content-Type": "application/json"
        },
        data: {
          userId: userInfo.userId,
          applyId: userInfo.applyId,
          userName: userInfo.userName,
          phoneNumber: userInfo.phoneNumber,
          email: userInfo.email,
          positionName: userInfo.positionName,
          position: userInfo.position,
          departmentId: userInfo.departmentId,
          schoolClass: userInfo.schoolClass,
          wxuserId: userInfo.wxuserId,
          avatarUrl: userInfo.avatarUrl,
          nickName: userInfo.nickName
        },
        success: function (res) {
          if(res.data.code===0){
            that.showSuccess("修改成功！")
            console.log("修改成功", res.data)
            resolve(true)
          }
          else{
            wx.showModal({
              showCancel: false,
              title: '提示',
              content: '获取用户信息失败，请刷新小程序缓存，注意不是重新进入小程序！若仍然无效，请联系管理员。',
              cancelColor: 'cancelColor',
            })
            resolve(false)
          }
        },
        fail: function (err) {
          that.showError('修改失败')
          console.error(err)
          reject(false)
        }
      })
    })
  },
  //展示狼头
  showWolf() {
    const that = this
    return new Promise((resolve, reject) => {
      wx.request({
        url: that.data.domain + '/returnFalse',
        success: function (res) {
          // console.log(res.data)
          resolve(res.data)
          // resolve(true)
        },
        fail: function (err) {
          console.log(err)
        }
      })
    })
  },
  //发送邮箱
  sendEmail(email, title, context) {
    const that = this
    return new Promise((resolve, reject) => {
      wx.request({
        url: baseUrl + '/sendExchangeDutyEmail',
        method: 'POST',
        data: {
          toUser: email,
          a: context,
          title: title
        },
        header: {
          "Content-Type": "application/x-www-form-urlencoded"
        },
        success: function (res) {
          console.log(res.data)
        },
        fail: function (err) {
          console.error(err)
        }
      })
    })
  },
  //查询部门干事列表
  selectMembers(page, pageSize, departmentId) {
    const that = this
    return new Promise((resolve, reject) => {
      wx.request({
        url: that.data.domain + '/selectMembers',
        method: "GET",
        header: {
          "Content-Type": "application/x-www-form-urlencoded"
        },
        data: {
          page: page,
          pageSize: pageSize,
          departmentId: departmentId
        },
        success: function (res) {
          console.log(res.data)
          resolve(res.data.data.data)
        },
        fail: function (err) {
          console.error(err)
          reject(null)
        }
      })
    })
  },
  //查询部门总人数
  selectTotalMember(departmentId) {
    const that = this
    return new Promise((resolve, reject) => {
      wx.request({
        url: that.data.domain + '/getTotal',
        method: "GET",
        data: {
          departmentId: departmentId
        },
        header: {
          "Content-Type": "application/x-www-form-urlencoded"
        },
        success: function (res) {
          resolve(res.data.data)
        },
        fail: function (err) {
          console.log(err)
          reject(0)
        }
      })
    })
  },
});




/*
  忽然想起来我可以在这里写工作日志，嘿嘿
  2023.10.20（版本号：2.3.18）
    这是第21次审核，取消了之前用的白屏方案，转而使用看起来更稳妥的阻止跳转的方案，
    如果这次还不行的话，就参考网上的建议，取消无感登录，无论新老用户统一在我的页面登录。
    希望人没事。

  2023.10.29（版本号：2.3.19）
    这是第22次审核，主要的投递报名表页面不能白屏，放个狼头顶替一下先
    发邮件页面不知道为什么完全进不去但会报错...很神奇。

  2023.11.3（版本号：2.3.20）
    这是第23次审核，现阶段可以确定白屏和禁止进入的方法都用不了，因为他还要体验完整功能...就离谱
    现在的方法是把现在的页面都用狼头代替，我就不信过不了
    对了，他现在还要求要有测试号，这个也加上试试

  2023.11.5（版本号：2.3.21）
  第24次审核，放狼头会显示无实际业务...所以把我们的实际业务改成给用户展示狼头就行...
  我都能预测到把我的页面的按钮全改成“放个狼头”会报什么错了，肯定会说什么业务重复之类的话...
  不管了，放上去再说

  2023.11.7
  一切都结束了...等等，好像还有web端要写

  2024.8.2
  没想到这个还有后续...话说服务器出事为什么要我背锅啊...
  算了，换个方式提高稳定性也不是不行

  2024.8.2（版本号2.3.24）
  把狼头从毛玻璃后面拽出来了...
  感觉越写到后面越没有指望，有种努力在屎上盖块布然后屎从布里渗出来的感觉。
  甚至于我现在写的东西在之后都不知道有没有用
  现在都已经开始筹备新的招新系统了搞这个真的有意义吗...

  2024.8.6（版本号2.4.1）
  woc这就是有靠谱队友的感觉吗...
  四天搞完了我之前两个多月的工作量
  现在甚至可以想想优化的事了
  真好啊，感觉后面的审核都没这么恐怖了

  2024.8.7（版本号2.4.2）
  发送邮件和恭喜寄语被打回了
  不用的页面就砍了算了，还能减点审核压力...
  不砍了，全上狼头！
  希望狼头们能帮我们躲过审核吧（求佛）

  2024.8.7（版本号2.4.3）
  没想到首页图还有加载不出来的时候...
  首页图也搞定了，接下来一定会蒸蒸日上的！

  2024.8.7（版本号2.4.4）
  狼头堂堂退休！

  2024.8.7（版本号2.4.5）
  虽然审核过了但是出了点意外...没事，出现问题修就行

  2024.8.9（版本号2.4.6）
  没想到线上版本跟调试版本还有不同...看来有的是修bug的时候了 

  2024.8.9（版本号2.4.7）
  番茄钟启动！
*/